The idea is that, after having analysed crime spatially, we now want
to get information about how crime evolves temporally. We therefore have
created a separate crime data set for each year. The results are
interesting. If we compare how many observations we have in each
crime-per-year data frame, we see that we have ~40.000ish cases a year
except for 2020 (which is certainly due to COVID) and the year 2021
(which is not finished). We don’t make any data frame for the years 2013
and below, because we see that we have not many observations which date
prior to the year 2013. The graph represents the monthly evolution of
crime for each year. We see that there seems to be a sort of pattern and
that, each year, crime increases mid-year before decreasing in winter.
The effect of colder temperatures and snow on crime in Baltimore is
known by the Baltimore Police Department who yet admits that “snow’s
effect on crime can be hard to predict” as its effect might depend on
the type of crime. Domestic violence for example often increase as
temperature decreases while aggravated assault decrease (Fenton,
2010).
Next, we calculate the crime per capita for each year using the
piping operator, grouping by community and summarizing the occurrences.
In the end we create the crime_evolution data sets which is
a combination of all the data.
Another interesting way to visualise how crime evolved is by using an
animated map. Indeed, this allows one to see the respective evolution of
crime in each communtiy. We can create animated maps using the
tmap_animation function and the tm_facets
argument while building the map. Yet, in order to be in position to use
it, we have to create a very particular tibble. In the case at hand, we
want our animated map to display crime per capita evolution over 7 years
(from 2014 to 2020, we get ride of 2021 as the year is not complete).
Therefore, we must have 7 x 56 observations, one crime per capita value
for each year, for each 56 area. Yet, the tibble becomes a bit more
peculiar as for each observation, we have to add in a separate column, a
polygon (which is an S4 element) corresponding to the area in question.
It is not possible to use a function like the rep function
to replicate S4 elements, therefore, we had to do that manually.
Once the tibble is built, we want to merge the data contained in it
in a SpatialPolygonsDataFrame. We want to use the baltimore
SpatialPolygonsDataFrame. However, as the tibble contains 392
observations, this will enlarge our our SpatialPolygonsDataFrame. As the
baltimore object is also used for other purposes, we create
an alias. Then, we merge the newly created tibble with the newly created
alias, simply using left_join. We create the
bbox object as well as an object called pb.
The first element allows us to delimit the geographical area of interest
and the second allows us to create custom classes. Finally, we create a
map using the tm_shape function and the
tm_facets argument. We finally create a gif using
tmap_animation.
anim_tibble <-
tibble(
Year = rep(2020:2014, 56),
Community = rep(Community_data$Community, each = 7),
CrimeRate = as.vector(t(crime_evolution[, -c(1, 2, 3, 4, 6, 8, 10, 12, 14, 16)])),
geometry = list(
baltimore@polygons[[1]],
baltimore@polygons[[1]],
baltimore@polygons[[1]],
baltimore@polygons[[1]],
baltimore@polygons[[1]],
baltimore@polygons[[1]],
baltimore@polygons[[1]],
baltimore@polygons[[2]],
baltimore@polygons[[2]],
baltimore@polygons[[2]],
baltimore@polygons[[2]],
baltimore@polygons[[2]],
baltimore@polygons[[2]],
baltimore@polygons[[2]],
baltimore@polygons[[3]],
baltimore@polygons[[3]],
baltimore@polygons[[3]],
baltimore@polygons[[3]],
baltimore@polygons[[3]],
baltimore@polygons[[3]],
baltimore@polygons[[3]],
baltimore@polygons[[4]],
baltimore@polygons[[4]],
baltimore@polygons[[4]],
baltimore@polygons[[4]],
baltimore@polygons[[4]],
baltimore@polygons[[4]],
baltimore@polygons[[4]],
baltimore@polygons[[5]],
baltimore@polygons[[5]],
baltimore@polygons[[5]],
baltimore@polygons[[5]],
baltimore@polygons[[5]],
baltimore@polygons[[5]],
baltimore@polygons[[5]],
baltimore@polygons[[6]],
baltimore@polygons[[6]],
baltimore@polygons[[6]],
baltimore@polygons[[6]],
baltimore@polygons[[6]],
baltimore@polygons[[6]],
baltimore@polygons[[6]],
baltimore@polygons[[7]],
baltimore@polygons[[7]],
baltimore@polygons[[7]],
baltimore@polygons[[7]],
baltimore@polygons[[7]],
baltimore@polygons[[7]],
baltimore@polygons[[7]],
baltimore@polygons[[8]],
baltimore@polygons[[8]],
baltimore@polygons[[8]],
baltimore@polygons[[8]],
baltimore@polygons[[8]],
baltimore@polygons[[8]],
baltimore@polygons[[8]],
baltimore@polygons[[9]],
baltimore@polygons[[9]],
baltimore@polygons[[9]],
baltimore@polygons[[9]],
baltimore@polygons[[9]],
baltimore@polygons[[9]],
baltimore@polygons[[9]],
baltimore@polygons[[10]],
baltimore@polygons[[10]],
baltimore@polygons[[10]],
baltimore@polygons[[10]],
baltimore@polygons[[10]],
baltimore@polygons[[10]],
baltimore@polygons[[10]],
baltimore@polygons[[11]],
baltimore@polygons[[11]],
baltimore@polygons[[11]],
baltimore@polygons[[11]],
baltimore@polygons[[11]],
baltimore@polygons[[11]],
baltimore@polygons[[11]],
baltimore@polygons[[12]],
baltimore@polygons[[12]],
baltimore@polygons[[12]],
baltimore@polygons[[12]],
baltimore@polygons[[12]],
baltimore@polygons[[12]],
baltimore@polygons[[12]],
baltimore@polygons[[13]],
baltimore@polygons[[13]],
baltimore@polygons[[13]],
baltimore@polygons[[13]],
baltimore@polygons[[13]],
baltimore@polygons[[13]],
baltimore@polygons[[13]],
baltimore@polygons[[14]],
baltimore@polygons[[14]],
baltimore@polygons[[14]],
baltimore@polygons[[14]],
baltimore@polygons[[14]],
baltimore@polygons[[14]],
baltimore@polygons[[14]],
baltimore@polygons[[15]],
baltimore@polygons[[15]],
baltimore@polygons[[15]],
baltimore@polygons[[15]],
baltimore@polygons[[15]],
baltimore@polygons[[15]],
baltimore@polygons[[15]],
baltimore@polygons[[16]],
baltimore@polygons[[16]],
baltimore@polygons[[16]],
baltimore@polygons[[16]],
baltimore@polygons[[16]],
baltimore@polygons[[16]],
baltimore@polygons[[16]],
baltimore@polygons[[17]],
baltimore@polygons[[17]],
baltimore@polygons[[17]],
baltimore@polygons[[17]],
baltimore@polygons[[17]],
baltimore@polygons[[17]],
baltimore@polygons[[17]],
baltimore@polygons[[18]],
baltimore@polygons[[18]],
baltimore@polygons[[18]],
baltimore@polygons[[18]],
baltimore@polygons[[18]],
baltimore@polygons[[18]],
baltimore@polygons[[18]],
baltimore@polygons[[19]],
baltimore@polygons[[19]],
baltimore@polygons[[19]],
baltimore@polygons[[19]],
baltimore@polygons[[19]],
baltimore@polygons[[19]],
baltimore@polygons[[19]],
baltimore@polygons[[20]],
baltimore@polygons[[20]],
baltimore@polygons[[20]],
baltimore@polygons[[20]],
baltimore@polygons[[20]],
baltimore@polygons[[20]],
baltimore@polygons[[20]],
baltimore@polygons[[21]],
baltimore@polygons[[21]],
baltimore@polygons[[21]],
baltimore@polygons[[21]],
baltimore@polygons[[21]],
baltimore@polygons[[21]],
baltimore@polygons[[21]],
baltimore@polygons[[22]],
baltimore@polygons[[22]],
baltimore@polygons[[22]],
baltimore@polygons[[22]],
baltimore@polygons[[22]],
baltimore@polygons[[22]],
baltimore@polygons[[22]],
baltimore@polygons[[23]],
baltimore@polygons[[23]],
baltimore@polygons[[23]],
baltimore@polygons[[23]],
baltimore@polygons[[23]],
baltimore@polygons[[23]],
baltimore@polygons[[23]],
baltimore@polygons[[24]],
baltimore@polygons[[24]],
baltimore@polygons[[24]],
baltimore@polygons[[24]],
baltimore@polygons[[24]],
baltimore@polygons[[24]],
baltimore@polygons[[24]],
baltimore@polygons[[25]],
baltimore@polygons[[25]],
baltimore@polygons[[25]],
baltimore@polygons[[25]],
baltimore@polygons[[25]],
baltimore@polygons[[25]],
baltimore@polygons[[25]],
baltimore@polygons[[26]],
baltimore@polygons[[26]],
baltimore@polygons[[26]],
baltimore@polygons[[26]],
baltimore@polygons[[26]],
baltimore@polygons[[26]],
baltimore@polygons[[26]],
baltimore@polygons[[27]],
baltimore@polygons[[27]],
baltimore@polygons[[27]],
baltimore@polygons[[27]],
baltimore@polygons[[27]],
baltimore@polygons[[27]],
baltimore@polygons[[27]],
baltimore@polygons[[28]],
baltimore@polygons[[28]],
baltimore@polygons[[28]],
baltimore@polygons[[28]],
baltimore@polygons[[28]],
baltimore@polygons[[28]],
baltimore@polygons[[28]],
baltimore@polygons[[29]],
baltimore@polygons[[29]],
baltimore@polygons[[29]],
baltimore@polygons[[29]],
baltimore@polygons[[29]],
baltimore@polygons[[29]],
baltimore@polygons[[29]],
baltimore@polygons[[30]],
baltimore@polygons[[30]],
baltimore@polygons[[30]],
baltimore@polygons[[30]],
baltimore@polygons[[30]],
baltimore@polygons[[30]],
baltimore@polygons[[30]],
baltimore@polygons[[31]],
baltimore@polygons[[31]],
baltimore@polygons[[31]],
baltimore@polygons[[31]],
baltimore@polygons[[31]],
baltimore@polygons[[31]],
baltimore@polygons[[31]],
baltimore@polygons[[32]],
baltimore@polygons[[32]],
baltimore@polygons[[32]],
baltimore@polygons[[32]],
baltimore@polygons[[32]],
baltimore@polygons[[32]],
baltimore@polygons[[32]],
baltimore@polygons[[33]],
baltimore@polygons[[33]],
baltimore@polygons[[33]],
baltimore@polygons[[33]],
baltimore@polygons[[33]],
baltimore@polygons[[33]],
baltimore@polygons[[33]],
baltimore@polygons[[34]],
baltimore@polygons[[34]],
baltimore@polygons[[34]],
baltimore@polygons[[34]],
baltimore@polygons[[34]],
baltimore@polygons[[34]],
baltimore@polygons[[34]],
baltimore@polygons[[35]],
baltimore@polygons[[35]],
baltimore@polygons[[35]],
baltimore@polygons[[35]],
baltimore@polygons[[35]],
baltimore@polygons[[35]],
baltimore@polygons[[35]],
baltimore@polygons[[36]],
baltimore@polygons[[36]],
baltimore@polygons[[36]],
baltimore@polygons[[36]],
baltimore@polygons[[36]],
baltimore@polygons[[36]],
baltimore@polygons[[36]],
baltimore@polygons[[37]],
baltimore@polygons[[37]],
baltimore@polygons[[37]],
baltimore@polygons[[37]],
baltimore@polygons[[37]],
baltimore@polygons[[37]],
baltimore@polygons[[37]],
baltimore@polygons[[38]],
baltimore@polygons[[38]],
baltimore@polygons[[38]],
baltimore@polygons[[38]],
baltimore@polygons[[38]],
baltimore@polygons[[38]],
baltimore@polygons[[38]],
baltimore@polygons[[39]],
baltimore@polygons[[39]],
baltimore@polygons[[39]],
baltimore@polygons[[39]],
baltimore@polygons[[39]],
baltimore@polygons[[39]],
baltimore@polygons[[39]],
baltimore@polygons[[40]],
baltimore@polygons[[40]],
baltimore@polygons[[40]],
baltimore@polygons[[40]],
baltimore@polygons[[40]],
baltimore@polygons[[40]],
baltimore@polygons[[40]],
baltimore@polygons[[41]],
baltimore@polygons[[41]],
baltimore@polygons[[41]],
baltimore@polygons[[41]],
baltimore@polygons[[41]],
baltimore@polygons[[41]],
baltimore@polygons[[41]],
baltimore@polygons[[42]],
baltimore@polygons[[42]],
baltimore@polygons[[42]],
baltimore@polygons[[42]],
baltimore@polygons[[42]],
baltimore@polygons[[42]],
baltimore@polygons[[42]],
baltimore@polygons[[43]],
baltimore@polygons[[43]],
baltimore@polygons[[43]],
baltimore@polygons[[43]],
baltimore@polygons[[43]],
baltimore@polygons[[43]],
baltimore@polygons[[43]],
baltimore@polygons[[44]],
baltimore@polygons[[44]],
baltimore@polygons[[44]],
baltimore@polygons[[44]],
baltimore@polygons[[44]],
baltimore@polygons[[44]],
baltimore@polygons[[44]],
baltimore@polygons[[45]],
baltimore@polygons[[45]],
baltimore@polygons[[45]],
baltimore@polygons[[45]],
baltimore@polygons[[45]],
baltimore@polygons[[45]],
baltimore@polygons[[45]],
baltimore@polygons[[46]],
baltimore@polygons[[46]],
baltimore@polygons[[46]],
baltimore@polygons[[46]],
baltimore@polygons[[46]],
baltimore@polygons[[46]],
baltimore@polygons[[46]],
baltimore@polygons[[47]],
baltimore@polygons[[47]],
baltimore@polygons[[47]],
baltimore@polygons[[47]],
baltimore@polygons[[47]],
baltimore@polygons[[47]],
baltimore@polygons[[47]],
baltimore@polygons[[48]],
baltimore@polygons[[48]],
baltimore@polygons[[48]],
baltimore@polygons[[48]],
baltimore@polygons[[48]],
baltimore@polygons[[48]],
baltimore@polygons[[48]],
baltimore@polygons[[49]],
baltimore@polygons[[49]],
baltimore@polygons[[49]],
baltimore@polygons[[49]],
baltimore@polygons[[49]],
baltimore@polygons[[49]],
baltimore@polygons[[49]],
baltimore@polygons[[50]],
baltimore@polygons[[50]],
baltimore@polygons[[50]],
baltimore@polygons[[50]],
baltimore@polygons[[50]],
baltimore@polygons[[50]],
baltimore@polygons[[50]],
baltimore@polygons[[51]],
baltimore@polygons[[51]],
baltimore@polygons[[51]],
baltimore@polygons[[51]],
baltimore@polygons[[51]],
baltimore@polygons[[51]],
baltimore@polygons[[51]],
baltimore@polygons[[52]],
baltimore@polygons[[52]],
baltimore@polygons[[52]],
baltimore@polygons[[52]],
baltimore@polygons[[52]],
baltimore@polygons[[52]],
baltimore@polygons[[52]],
baltimore@polygons[[53]],
baltimore@polygons[[53]],
baltimore@polygons[[53]],
baltimore@polygons[[53]],
baltimore@polygons[[53]],
baltimore@polygons[[53]],
baltimore@polygons[[53]],
baltimore@polygons[[54]],
baltimore@polygons[[54]],
baltimore@polygons[[54]],
baltimore@polygons[[54]],
baltimore@polygons[[54]],
baltimore@polygons[[54]],
baltimore@polygons[[54]],
baltimore@polygons[[55]],
baltimore@polygons[[55]],
baltimore@polygons[[55]],
baltimore@polygons[[55]],
baltimore@polygons[[55]],
baltimore@polygons[[55]],
baltimore@polygons[[55]],
baltimore@polygons[[56]],
baltimore@polygons[[56]],
baltimore@polygons[[56]],
baltimore@polygons[[56]],
baltimore@polygons[[56]],
baltimore@polygons[[56]],
baltimore@polygons[[56]]
)
)
baltimore_alias <- baltimore
baltimore_alias@polygons <- anim_tibble$geometry
baltimore_alias@data$community %in% anim_tibble$Community #Again, we ensure that we have a perfect match
baltimore_alias@data <-
left_join(baltimore_alias@data,
anim_tibble,
by = c('community' = 'Community'))
bbox <- baltimore@bbox
pb <- c(0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250)
animated_crime_map <- tm_shape(baltimore_alias,bbox = bbox, projection = crs.geo1) +
tm_polygons("CrimeRate",breaks=pb,title ="Crime") +
tm_facets(free.scales.fill = F,along = "Year")+tm_shape(baltimore)+tm_borders()
tmap_animation(animated_crime_map, filename = "animated_crime_map.gif", delay =
85)
We see that crime peaks in 2017, before decreasing in most areas,
except areas in the city center such as Downtown/Seton Hill.